
#ifndef GamePad_h
#define GamePad_h

#include <Riccsson/Xna/Framework/Input/PlayerIndex.h>
#include <Riccsson/Xna/Framework/Input/GamePadCapabilities.h>
#include <Riccsson/Xna/Framework/Input/GamePadState.h>
#include <Riccsson/Xna/Framework/Input/GamePadDeadZone.h>

namespace Riccsson
{
	namespace Xna
	{
		namespace Framework
		{
			namespace Input
			{
				// Summary:
				//     Allows retrieval of user interaction with an Xbox 360 Controller and setting
				//     of controller vibration motors. Reference page contains links to related
				//     code samples.
				class GamePad sealed
				{
					STATIC_CLASS(GamePad);

					// Summary:
					//     Retrieves the capabilities of an Xbox 360 Controller.
					//
					// Parameters:
					//   playerIndex:
					//     Index of the controller to query.
					public: static GamePadCapabilities GetCapabilities(PlayerIndex playerIndex)
					{
						throw;
					}
					//
					// Summary:
					//     Gets the current state of a game pad controller. Reference page contains
					//     links to related code samples.
					//
					// Parameters:
					//   playerIndex:
					//     Player index for the controller you want to query.
					public: static GamePadState GetState(PlayerIndex playerIndex)
					{
						throw;
					}
					//
					// Summary:
					//     Gets the current state of a game pad controller, using a specified dead zone
					//     on analog stick positions. Reference page contains links to related code
					//     samples.
					//
					// Parameters:
					//   playerIndex:
					//     Player index for the controller you want to query.
					//
					//   deadZoneMode:
					//     Enumerated value that specifies what dead zone type to use.
					public: static GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone deadZoneMode)
					{
						throw;
					}
					//
					// Summary:
					//     Sets the vibration motor speeds on an Xbox 360 Controller. Reference page
					//     contains links to related code samples.
					//
					// Parameters:
					//   playerIndex:
					//     Player index that identifies the controller to set.
					//
					//   leftMotor:
					//     The speed of the left motor, between 0.0 and 1.0. This motor is a low-frequency
					//     motor.
					//
					//   rightMotor:
					//     The speed of the right motor, between 0.0 and 1.0. This motor is a high-frequency
					//     motor.
					public: static bool SetVibration(PlayerIndex playerIndex, float leftMotor, float rightMotor)
					{
						throw;
					}
				};
			}
		}
	}
}

#endif